//开启严格模式，规范代码，提高浏览器运行效率

// "use strict";

//定义一个类，通常首字母大写

var TimeSpan = function (startTime, endTime, type) {
var that = this
that.type=type||'all';
// console.log(that.type)
//开始时间判断
if (typeof startTime === 'string') {
    that.startTime = new Date(startTime).getTime();
}else if(typeof startTime === "number"){
    that.startTime=startTime;
}else if(typeof startTime==="object"){
    try {
        that.startTime=startTime.getTime();//日期类型获取毫秒数
    } catch (error) {
        throw Error('参数一类型错误,请输入日期or字符串or数字');
    }
}else{
    throw Error('参数一类型错误,请输入日期or字符串or数字');
}
//结束时间判断
if (typeof endTime === 'string') {
    that.endTime = new Date(endTime).getTime();
}else if(typeof endTime === "number"){
    that.endTime=endTime;
}else if(typeof endTime === "object"){
    try {
        that.endTime=endTime.getTime();//日期类型获取毫秒数
    } catch (error) {
        throw Error('参数二类型错误,请输入日期or字符串or数字');
    }
    
}else{
    throw Error('参数二类型错误,请输入日期or字符串or数字');
}
TimeSpan.fn.startTime = that.startTime
TimeSpan.fn.type=that.type
TimeSpan.fn.endTime = that.endTime

return TimeSpan.fn.init();

}


//覆写原型链，给继承者提供方法

TimeSpan.fn = TimeSpan.prototype = {

constructor: TimeSpan,

init: function () {
    let usedTime = this.endTime - this.startTime; // 相差的毫秒数
    let days = Math.floor(usedTime / (24 * 3600 * 1000)); // 计算出天数
    let leavel = usedTime % (24 * 3600 * 1000); // 计算天数后剩余的时间
    let hours = Math.floor(leavel / (3600 * 1000)); // 计算剩余的小时数
    let leavel2 = leavel % (3600 * 1000); // 计算剩余小时后剩余的毫秒数
    let minutes = Math.floor(leavel2 / (60 * 1000)); // 计算剩余的分钟数
    switch(this.type){
        case 'all':
            return days + '天' + hours + '时' + minutes + '分';
            break;
        case 'ms':
            return usedTime;
            break;
        case 's':
            return Math.floor((this.endTime - this.startTime) / 1000);
            break;
        case 'm':
            return Math.floor((this.endTime - this.startTime) / 1000/60);
            break;
        case 'h':
            return Math.floor((this.endTime - this.startTime) / 1000/60/60);
            break;
        case 'd':
            return Math.floor((this.endTime - this.startTime) / 1000/60/60/24);
            break;
        default:
            console.log(this.type)
            throw Error("参数值有误,请勿输入ms、s、m、h、d、all以外的值")
            break;
    }
},

}


//兼容CommonJs规范

if (typeof module !== 'undefined' && module.exports) module.exports = TimeSpan;

//兼容AMD/CMD规范

if (typeof define === 'function') define(function () {

return TimeSpan;

});


TimeSpan.fn.init.prototype = TimeSpan.fn;

module.exports = TimeSpan;